﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;

namespace Grupo2.Persistencia
{
    public class AvisoDAO
    {
        //Atributos
        private String cadenaConexion = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Grupo2;Data Source=localhost";

        private SqlConnection conexion;

        public AvisoDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

        public Aviso CrearAviso(Aviso aviso)
        {
            conexion.Open();
            String sentencia = "INSERT INTO Aviso ( " +
                                       "Id_Aviso," +
                                       "Id_Ofertante," +
                                       "Puesto_Trabajo," +
                                       "Fecha_Publicacion," +
                                       "Condicion_Publicacion," +
                                       "Localidad," +
                                       "Rango_Sueldo," +
                                       "Modalidad_Trabajo," +
                                       "Idioma," +
                                       "Nivel_Academico," +
                                       "Carreras_Afines," +
                                       "Dias_Vigencia," +
                                       "Horario_Trabajo," +
                                       "Periodo_Contrato," +
                //"Principales_Funciones," +
                                       "Numero_Vacantes" +
                                       ")" +
                                        "VALUES(" +
                                       aviso.Id_Aviso + "," +
                                       aviso.Ofertante.Id_Ofertante + ",'" +
                                       aviso.Puesto_Trabajo +
                                       "','2011.06.12','" +
                //                       "','" + aviso.Fecha_Publicacion + "','" +
                                       aviso.Condicion_Publicacion + "','" +
                                       aviso.Localidad + "','" +
                                       aviso.Rango_Sueldo + "','" +
                                       aviso.Modalidad_Trabajo + "','" +
                                       aviso.Idioma + "','" +
                                       aviso.Nivel_Academico + "','" +
                                       aviso.Carreras_Afines + "'," +
                                       aviso.Dias_Vigencia + ",'" +
                                       aviso.Horario_Trabajo + "','" +
                                       aviso.Periodo_Contrato + "'," +  //'" +
                //aviso.Principales_Funciones + "'," +
                                       aviso.Numero_Vacantes +
                                       ")";

            //            throw new Exception(sentencia);

            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            //return aviso;
            return this.ObtenerAviso(aviso.Id_Aviso); //TODO: Queda pendiente de devolver objeto creado
        }

        public Aviso ObtenerAviso(Int32 Id_Aviso)
        {
            conexion.Open();
            String sentencia = "SELECT " +
                               "Id_Aviso," +
                               "Id_Ofertante," +
                               "Puesto_Trabajo," +
                               "Fecha_Publicacion," +
                               "Condicion_Publicacion," +
                               "Localidad," +
                               "Rango_Sueldo," +
                               "Modalidad_Trabajo," +
                               "Idioma," +
                               "Nivel_Academico," +
                               "Carreras_Afines," +
                               "Dias_Vigencia," +
                               "Horario_Trabajo," +
                               "Periodo_Contrato," +
                //"Principales_Funciones," +
                               "Numero_Vacantes " +
                               "FROM Aviso WHERE Id_Aviso=" + Id_Aviso;
            //
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Aviso aviso = new Aviso();
            //
            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                aviso.Id_Aviso = Convert.ToInt32(resultado["Id_Aviso"]);
                aviso.Ofertante.Id_Ofertante = Convert.ToInt32(resultado["Id_Ofertante"]);
                aviso.Puesto_Trabajo = (String)resultado["Puesto_Trabajo"];
                aviso.Fecha_Publicacion = (DateTime)resultado["Fecha_Publicacion"];
                aviso.Condicion_Publicacion = (String)resultado["Condicion_Publicacion"];
                aviso.Localidad = (String)resultado["Localidad"];
                aviso.Rango_Sueldo = (String)resultado["Rango_Sueldo"];
                aviso.Modalidad_Trabajo = (String)resultado["Modalidad_Trabajo"];
                aviso.Idioma = (String)resultado["Idioma"];
                aviso.Nivel_Academico = (String)resultado["Nivel_Academico"];
                aviso.Carreras_Afines = (String)resultado["Carreras_Afines"];
                aviso.Dias_Vigencia = Convert.ToInt32(resultado["Dias_Vigencia"]);
                aviso.Horario_Trabajo = (String)resultado["Horario_Trabajo"];
                aviso.Periodo_Contrato = (String)resultado["Periodo_Contrato"];
                //aviso.Principales_Funciones = (String)resultado["Principales_Funciones"];
                aviso.Numero_Vacantes = Convert.ToInt32(resultado["Numero_Vacantes"]);

                /*   throw new Exception(" ID Aviso:" + aviso.Id_Aviso +
                                       " Id Ofertante:" + aviso.Ofertante.Id_Ofertante +
                                       " Puesto:" + aviso.Puesto_Trabajo);
                   */
            }
            else // Retornamos una excepción si no existe el registro en la BD
            {

                //throw new Exception("El Aviso solicitado no existe en la BD");
                aviso = null;
            }
            conexion.Close();
            return aviso;
        }

        public Aviso ModificarAviso(Aviso aviso)
        {
            conexion.Open();
            String sentencia = "UPDATE Aviso SET " +
                               " Puesto_Trabajo='" +
                                aviso.Puesto_Trabajo + "'" +
                               ",Condicion_publicacion='" +
                                aviso.Condicion_Publicacion + "'" +
                               ",Rango_Sueldo='" +
                                aviso.Rango_Sueldo + "'" +
                               ",Modalidad_trabajo='" +
                                aviso.Modalidad_Trabajo + "'" +
                               ",Idioma='" +
                                aviso.Idioma + "'" +
                               ",periodo_contrato='" +
                                aviso.Periodo_Contrato + "'" +
                               " WHERE Id_aviso=" + aviso.Id_Aviso
                               ;

            //            throw new Exception(sentencia);

            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            //return aviso;
            return this.ObtenerAviso(aviso.Id_Aviso); //TODO: Queda pendiente de devolver objeto creado
        }

        public void EliminarAviso(Int32 nId_Aviso)
        {
            conexion.Open();
            String sentencia = "DELETE FROM aviso WHERE Id_Aviso=" + nId_Aviso;
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            conexion.Close();
            return;
        }

        public Int32 ObtenerID()
        {
            conexion.Open();
            String sentencia = "SELECT MAX(Id_Aviso) secuencia FROM Aviso";
            //
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            //
            Int32 secuencia = 0;
            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                secuencia = Convert.ToInt32(resultado["secuencia"]);
            }
            else 
            {
                secuencia = 0;
            }
            conexion.Close();
            return (secuencia); 
        }


    }
}